package kr.co.bettersoft.usedmarketandroid.activity;

import java.util.Locale;

import kr.co.bettersoft.usedmarketandroid.common.CommonConstant;
import kr.co.bettersoft.usedmarketandroid.common.CommonUtil;
import kr.co.bettersoft.usedmarketandroid.common.UsedMarketRest;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketMember;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketSMS;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
 * 멤버 등록 화면
 *   이미 멤버 등록 되어 있는 경우(설정 파일에 저장된 전화번호) 인증 정보 화면으로 이동한다
 *  본 등록 화면 에서는
 *   전화번호 / 인증번호 입력
 *   인증번호 요청 버튼, 승인 요청 버튼
 *   이메일 주소 입력 / 닉네임 입력 (기본값은 전번 뒷자리4자리 + 임의 숫자4자리) /생년월일 선택 (네이티브)
 *   멤버 등록 버튼 -- 모든 항목은 필수 입력이며 미입력 이 있으면 알림창.
 *   멤버 등록 메소드 호출..(중복 검사는 함께 처리)
 *   
 *  상단 뒤로 버튼 있고, 멤버 등록 성공시 결과 띄우고 자동으로 뒤로 이동 (이때 전번 저장)
 *  
 * @author blue
 *
 */
public class UsedMarketCertificationActivity extends Activity{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수
		
		String TAG = "UsedMarketCertificationActivity";

		public final int NICK_NAME_MINIMUM_LENGH = 1;		// 닉네임 최소 글자수
		public final int NICK_NAME_MAXIMUM_LENGH = 30;		// 닉네임 최대 글자수
		
		public final int CERTIFICATION_STEP1 = 101; // 인증 1단계. 인증 번호 요청
		public final int CERTIFICATION_STEP2 = 102; // 인증 2단계. 인증 번호 승인
		
		public final int NICK_NAME_DUPLICATION_CHECK = 103; // 닉네임 중복 검사
		public final int REGISTER_MEMBER = 104; 			// 멤버 등록
		
		
		String phoneNum = "";
		String tempPhoneNum = "";	// 승인번호를 요청한 전화번호. 승인번호 요청 이후 전화번호 바꾸는것 방지하기 위하여 비교
		String nickName = "";
		String email = "";
		
		
		// 설정 파일 저장소  
		SharedPreferences sharedPrefCustom;
		
		
		// 화면 구성
		Button backBtn;									// 뒤로가기 버튼
		Button requestCertiNumBtn;						// 인증번호 요청 버튼
		Button certiNumConfirmBtn;						// 승인 버튼
		Button nickNameDuplicateCheckBtn;				// 닉네임 중복 검사 버튼
		Button registerMemberBtn;						// 등록 버튼
		
		CheckBox agreeTermsCheck;				// 이용약관 동의			
		Button showTermsBtn;					// 이용약관 보기
		
		
		EditText userPhoneNumber;						// 사용자 전화번호 입력창, 인증번호 입력창
		EditText userCertiNumber;						
		EditText nickNameTxt;							// 사용자 닉네임, 이메일 주소 입력창
		EditText emailTxt;								
		
		boolean certificationSuccess = false;			// 승인 여부
		String certificationSuccessPhoneNum = "";		// 승인된 전화번호
		boolean isNeedRegister = false;					// 가입 필요 여부 
		
		boolean duplicationCheckSuccess = false;		// 중복검사 성공 여부
		String duplicationCheckSuccessNickName = ""; 	// 중복검사 성공한 닉네임
		
		
		ProgressBar pb1;		// 중단 로딩 진행바

		// 키보드 자동 숨기기 위한 부모 레이아웃(리스너 달아서 키보드 숨김)과 입력 매니저
		View parentLayout;
		InputMethodManager imm;		// 키보드 제어
	    
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////	
		// 핸들러
		Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg){
				Bundle b = msg.getData();
				try{
					if(b.getInt("showErrToast")==1){
						Toast.makeText(UsedMarketCertificationActivity.this,b.getString("msg"), Toast.LENGTH_SHORT).show();
					}
					if(b.getInt("showAlert")==1){					 // 알림 및 경고창 . 
						new AlertDialog.Builder(returnThis())
						.setTitle(CommonConstant.alertTitle)							
						.setMessage(b.getString("msg"))
						.setIcon(R.drawable.ic_launcher)		// 경고창.  
						.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int whichButton) {
								// 그냥 사용자 확인 용이기 때문에 추가 조작 없음.
							}})
							.setNegativeButton("", null).show();
					}
					if(b.getInt("showAlert")==2){					 // 인증 성공 
						// 토스트만 띄우고 바로 패스한다.
						Toast.makeText(UsedMarketCertificationActivity.this,b.getString("msg"), Toast.LENGTH_SHORT).show();
						finish();
					}
					
					if(b.getInt("registerConfirm")==1){					 // 인증 성공 
						new AlertDialog.Builder(returnThis())
						.setTitle(CommonConstant.alertTitle)							
						.setMessage("멤버 등록하시겠습니까?")
						.setIcon(R.drawable.ic_launcher)		// 경고창.  
						.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int whichButton) {
								// 멤버 등록
								try {
									handler.sendEmptyMessage(REGISTER_MEMBER);		
								} catch (Exception e) {
									e.printStackTrace();
								} 
							}})
							.setNegativeButton(android.R.string.no, null)		 
							.show();
					}
					
					if(b.getInt("order")==1){
						// 프로그래스바 실행
						pb1.setVisibility(View.VISIBLE);
					}else if(b.getInt("order")==2){
						// 프로그래스바  종료
						pb1.setVisibility(View.INVISIBLE);
					}
					
					switch (msg.what)
					{
						case CERTIFICATION_STEP1 : runOnUiThread(new RunnableCertificationStep1());
							break;
						case CERTIFICATION_STEP2 : runOnUiThread(new RunnableCertificationStep2());
							break;
						case NICK_NAME_DUPLICATION_CHECK : runOnUiThread(new RunnableSelectDuplicationNickNameBeforeRegister());
						break;
						case REGISTER_MEMBER : runOnUiThread(new RunnableRegisterMemberToServer());		
						break;
						default : 
							break;
					}
					
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		};
		
		
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
		
		
		/** Called when the activity is first created. */
		@Override
		public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			requestWindowFeature( Window.FEATURE_NO_TITLE );
			setContentView(R.layout.usedmarket_certification_activity);
			
			// 미리 검사해서 인증 받은 경우에는 인증 확인 화면으로 이동시킨다.
			// prefs
			sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
					Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
			phoneNum = sharedPrefCustom.getString("phoneNum", "");
			
			 // 테스트를 위해 임시 주석 처리 ### 
			if(phoneNum.length()<1){
				// 인증 필요. 화면 유지
				Log.d(TAG,"need certification");
			}else{
				// 인증 받음. 인증 확인 화면으로 이동
				Log.d(TAG,"already certified");
				Intent intent = new Intent(this, UsedMarketCertiInfoActivity.class);
				startActivity(intent);
				finish();
			}
			
			
			
			pb1=(ProgressBar) findViewById(R.id.certi_progressbar);
			
			backBtn = (Button) findViewById(R.id.backBtn);	// 뒤로 버튼
			requestCertiNumBtn = (Button) findViewById(R.id.requestCertiNumBtn);	// 인증번호 요청 버튼
			certiNumConfirmBtn = (Button) findViewById(R.id.certiNumConfirmBtn);	// 인증 버튼
			nickNameDuplicateCheckBtn = (Button) findViewById(R.id.nickNameDuplicateCheckBtn);		
			registerMemberBtn = (Button) findViewById(R.id.registerMemberBtn);		
			
			agreeTermsCheck = (CheckBox) findViewById(R.id.agree_terms_check);	
			showTermsBtn = (Button) findViewById(R.id.show_terms_btn);	
			
			userPhoneNumber = (EditText)findViewById(R.id.userPhoneNumber);		// 전화번호 입력창
			userCertiNumber = (EditText)findViewById(R.id.userCertiNumber);		// 인증번호 입력창
			nickNameTxt = (EditText)findViewById(R.id.nickNameTxt);			
			emailTxt = (EditText)findViewById(R.id.emailTxt);			
			
			backBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					finish();
				}
			});
			
			TelephonyManager systemService;
			String devicePhoneNum ;
			try{
				//전번 획득.
				systemService = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
				// 전화번호 일반형으로 변환
				devicePhoneNum = systemService.getLine1Number();
				if(devicePhoneNum.contains("+82")){
					devicePhoneNum = devicePhoneNum.replace("+82", "0");		// +82 10 1234 5678 --> 010 1234 5678  
				}
				devicePhoneNum = devicePhoneNum.replace("-", "");			// - 제거
				
			}catch(Exception e){
				e.printStackTrace();
				devicePhoneNum = "";
			}
			
			userPhoneNumber.setText(devicePhoneNum);
			
			// 부모 레이아웃 리스너 - 외부 터치 시 키보드 숨김 용도 
			parentLayout = findViewById(R.id.certi_step2_parent_layout);		
			parentLayout.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
				}
			});
			
			
			
			
			
			// 서버로 전화번호를 보내서 인증번호를 요청한다.
			requestCertiNumBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
					tempPhoneNum = userPhoneNumber.getText()+"";
					if(tempPhoneNum.length()>0){
						try {
							handler.sendEmptyMessage(CERTIFICATION_STEP1);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}else{		// 전번없음
						showResultDialog("전화번호를 입력해 주십시오.");
					}
				}
			});
			// 인증버튼. 인증번호를 가지고 서버에 인증 절차를 밟는다.
			certiNumConfirmBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
					phoneNum = userPhoneNumber.getText()+"";
					if(phoneNum.length()<1){
						showResultDialog("전화번호 정보가 없습니다.");		
					}else if((userCertiNumber.getText()+"").length()!=4){
						showResultDialog("승인번호 4자리를 입력해주세요. ");		// 승인번호 4자리를 입력해주세요. 
					}else if(!(phoneNum.equals(tempPhoneNum))){		// 승인 요청 이후 전번을 바꿨다면 이렇게.. 다시 승인 요청하도록. 
						showResultDialog("승인받은 전화번호와 입력된 전화번호가 일치하지 않습니다.");
					}else{
						// 서버로 인증번호를 보내서 인증번호를 확인한다.
						try {
//							 // 인증 2단계.		  
							handler.sendEmptyMessage(CERTIFICATION_STEP2);
						} catch (Exception e) {
							e.printStackTrace();
						} 
					}
				}
			});
			
			
			// 닉네임 중복 검사
			nickNameDuplicateCheckBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
					nickName = nickNameTxt.getText()+"";
					if(nickName.length()<1){
						showResultDialog("닉네임을 입력하여 주십시오.");		
					}else if(nickName.length() < NICK_NAME_MINIMUM_LENGH){
						showResultDialog("닉네임은 최소 "+ NICK_NAME_MINIMUM_LENGH + " 글자 이상이어야 합니다.");		
					}else if(nickName.length() < NICK_NAME_MINIMUM_LENGH){ 
						showResultDialog("닉네임은 최대 "+ NICK_NAME_MAXIMUM_LENGH + " 글자까지 가능합니다.");	
					}else{
						// 서버로 닉네임 중복 검사 실행
						try {
							handler.sendEmptyMessage(NICK_NAME_DUPLICATION_CHECK);
						} catch (Exception e) {
							e.printStackTrace();
						} 
					}
				}
			});
			
			
			// 이용약관 보기
			showTermsBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
					Intent intent = new Intent(returnThis(), UsedMarketWebViewActivity.class);
					intent.putExtra("loadingURL", CommonConstant.termsPolicyURL);
					intent.putExtra("isGetRequest", true);
					startActivity(intent);
				}
			});
			
			
			// 멤버 등록
			registerMemberBtn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					hideKeyboard();
					
					nickName = nickNameTxt.getText()+"";
					phoneNum = userPhoneNumber.getText()+"";
					email  = emailTxt.getText()+""; 
					
					CommonUtil commonUtil = new CommonUtil();
					
					if(!certificationSuccess){
						showResultDialog("먼저 전화번호 인증을 받아야 합니다.");		
					}else if(!duplicationCheckSuccess){
						showResultDialog("닉네임 중복검사를 하지 않았습니다.");		
					}else if(!phoneNum.equals(certificationSuccessPhoneNum)){
						showResultDialog("입력된 전화번호와 인증된 전화번호가 다릅니다.");	
					}else if(!nickName.equals(duplicationCheckSuccessNickName)){
						showResultDialog("입력된 닉네임과 중복검사된 닉네임이 다릅니다.");	
					}else if(email.length()<1){
						showResultDialog("이메일을 입력해 주십시오.");
					}else if(!commonUtil.isValidEmail(email)){
						showResultDialog("올바른 이메일 형식이 아닙니다.");
					}else if(!(agreeTermsCheck.isChecked())){
						showResultDialog("이용 약관에 동의하지 않으셨습니다.");
					}else{
						// 확인 받고 진행
						registerConfirm();
					}
				}
			});
		}
		
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		public void userCertifiedComplete1(){	
			// 서버에 저장 후 pref 에 저장 
			new backgroundThreadRegisterMemberToServer().execute();
		}
		
		
		//  pref 에 저장후 다음 단계로 진행.
		public void userCertifiedComplete2(){
			// 인증 완료 후 작업

			// 로케일
			//사용자 지역, 언어
			Locale systemLocale ;
			String strCountry;
			String strLanguage;
			
			try{
				// 로케일
				//사용자 지역, 언어
				systemLocale = getResources().getConfiguration().locale;
				strCountry = systemLocale.getCountry();
				strLanguage = systemLocale.getLanguage();
			}catch(Exception e){
				e.printStackTrace();		// 실패시 하드코딩. 한국. ### 
				strCountry = "KR";
				strLanguage = "ko";
			}
			// 저장
			SharedPreferences sharedPreferences = getSharedPreferences(CommonConstant.prefName, Activity.MODE_PRIVATE);
			SharedPreferences.Editor editor = sharedPreferences.edit();
			if(phoneNum.length()>0){
				editor.putString("agreedYN", "Y");			// 인증 여부 저장
				editor.putString("phoneNum", phoneNum);		// 전번도 저장	 
				editor.putString("strCountry", strCountry);
				editor.putString("strLanguage", strLanguage);
				editor.commit();
			}
			showResultDialog2("등록이 성공하였습니다.");	// 인증 성공 메시지를 띄우고 바로 다음 화면으로
		}
		
		
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
		
		
		
		/**
		 * 러너블. 인증 1단계 수행. 인증번호 요청
		 */
		class RunnableCertificationStep1 implements Runnable {
			public void run(){
				new backgroundThreadCertificationStep1().execute();
			}
		}
		/**
		 * backgroundThreadCertificationStep1
		 * 비동기    서버와 통신하여 서버와 통신하여 인증 1단계 수행. 인증번호 요청
		 * @author blue
		 *
		 */
		public class backgroundThreadCertificationStep1 extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadCertificationStep1");
				
				// 파라미터 세팅
				UsedMarketSMS usedMarketSMS = new UsedMarketSMS();
				usedMarketSMS.setPhoneNumber(userPhoneNumber.getText()+"");
				
				// 서버 메소드 호출
				showPb();
				
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				
				String result = usedMarketRest.RestCertificationStep_1(usedMarketSMS);
				Log.d(TAG,"backgroundThreadCertificationStep1 result::"+result);
				if(result.equals("SUCCESS")){
					// 인증 성공.
					showResultDialog("인증 요청이 성공하였습니다.");	
				}else{
					// 인증 실패.
					showResultDialog("인증 요청이 실패하였습니다.");
				}
				hidePb();
				return null; 
			}
		}
		
		/**
		 * 러너블. 인증2단계 수행.
		 */
		class RunnableCertificationStep2 implements Runnable {
			public void run(){
				new backgroundThreadCertificationStep2().execute();
			}
		}
		/**
		 * backgroundThreadCertificationStep2
		 * 비동기     서버와 통신하여 인증2단계 수행.
		 * @author blue
		 *
		 */
		public class backgroundThreadCertificationStep2 extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadCertificationStep2");
				
				// 파라미터 세팅
				UsedMarketSMS usedMarketSMS = new UsedMarketSMS();
				usedMarketSMS.setPhoneNumber(userPhoneNumber.getText()+"");					// 전번
				usedMarketSMS.setActivateYn("Y");											
				usedMarketSMS.setCertificationNumber(userCertiNumber.getText()+"");			// 승인번호
				phoneNum = userPhoneNumber.getText()+"";	// 성공 했을때에 사용하기 위해 미리 저장해둔다.
				
				// 서버 메소드 호출
				showPb();
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				String callResult = usedMarketRest.RestCertificationStep_2(usedMarketSMS);
				hidePb();
				// 결과 처리
				Log.d(TAG,"backgroundThreadCertificationStep2 callResult:"+callResult);
				if(callResult.equals("SUCCESS_ADMISSION")){				// 인증 성공
					Log.i(TAG, "SUCCESS_ADMISSION");
					showResultDialog("인증이 성공하였습니다.");
					certificationSuccess = true;
					certificationSuccessPhoneNum = phoneNum;
					isNeedRegister = false;
					
				}else if(callResult.equals("SUCCESS_NON_EXIST")){	// 인증 성공		//  callResult:SUCCESS_NON_EXIST
					Log.i(TAG, "SUCCESS_NON_EXIST");
					showResultDialog("인증이 성공하였습니다.");
					certificationSuccess = true;
					certificationSuccessPhoneNum = phoneNum;
					isNeedRegister = true;
				}else{														// 인증 실패
					Log.i(TAG, "FAIL_ADMISSION");
					showResultDialog("인증에 실패하였습니다.");
				}
				return null; 
			}
		}
		
		
		/**
		 * 러너블. 닉네임 중복검사		RestSelectDuplicationNickNameBeforeRegister
		 */
		class RunnableSelectDuplicationNickNameBeforeRegister implements Runnable {
			public void run(){
				new backgroundThreadSelectDuplicationNickNameBeforeRegister().execute();
			}
		}
		/**
		 * backgroundThreadSelectDuplicationNickNameBeforeRegister
		 * 비동기     서버와 통신하여 닉네임 중복검사
		 * @author blue
		 *
		 */
		public class backgroundThreadSelectDuplicationNickNameBeforeRegister extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadSelectDuplicationNickNameBeforeRegister");
				
				// 파라미터 세팅
				UsedMarketMember usedMarketMember = new UsedMarketMember();
				usedMarketMember.setPhoneNumber(phoneNum);
				usedMarketMember.setNickName(nickName);
				
				// 서버 메소드 호출
				showPb();
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				String callResult = usedMarketRest.RestSelectDuplicationNickNameBeforeRegister(usedMarketMember);
				hidePb();
				// 결과 처리
				Log.d(TAG,"backgroundThreadSelectDuplicationNickNameBeforeRegister callResult:"+callResult);

				if(callResult.equals("0")){
					Log.d(TAG,"nick name available");
					showResultDialog("사용할 수 있는 닉네임입니다.");
					duplicationCheckSuccess = true;
					duplicationCheckSuccessNickName = nickName;
					
				}else{
					Log.d(TAG,"nick name duplicated");
					showResultDialog("이미 사용중인 닉네임입니다.");
					duplicationCheckSuccess = false;
					duplicationCheckSuccessNickName = nickName;
					
				}
				return null; 
			}
		}
		
		
		
		/**
		 * 러너블. 멤버 등록		REGISTER_MEMBER		RestRegisterMemberToServer  
		 *  이를 위해 중복 검사를 먼저 하고 중복검사가 끝나면 서버 저장이 필요할경우 저장하고
		 *   pref 에 전화번호 정보를 저장한다.
		 */
		class RunnableRegisterMemberToServer implements Runnable {
			public void run(){
				new backgroundThreadSelectMember().execute();		// 중복 검사 먼저 하고 이후 알아서 등록되도록 수정 
			}
		}
		/**
		 * backgroundThreadSelectMember
		 * 비동기  . 서버에 저장되어 있는지 확인.  저장되어 있으면 프립에만 저장 후 통과. 저장되어 있지 않으면 서버에 저장 후 프립에 저장 후 통과
		 * @author blue
		 *
		 */
		public class backgroundThreadSelectMember extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadSelectMember");
				
				// 파라미터 세팅
				UsedMarketMember usedMarketMember = new UsedMarketMember();
				usedMarketMember.setPhoneNumber(phoneNum);					// 전번

				// 서버 메소드 호출
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				String callResult = usedMarketRest.RestSelectMemberFromApp(usedMarketMember);
				hidePb();
				// 결과 처리
				Log.d(TAG,"backgroundThreadSelectMember callResult:"+callResult);
				
				if(callResult.length()<1){
					// 정상. 서버 미등록. 등록 필요
					Log.d(TAG,"Need to reg");
					userCertifiedComplete1();		// 서버 및 설정에 저장 후 다음 단계로.
				}else if("F".equals(callResult)){
					// 실패 
					Log.i(TAG, "FAIL_ADMISSION");
					showResultDialog("등록에 실패하였습니다.");
				}else{
					Log.d(TAG,"Need not reg");
					/*
					 * "restrictionYn":"Y",
					 * "activateYn":"N",
					 */
					try {
						
						// 기존 데이터가 있는 경우 
						JSONObject jsonObject = new JSONObject(callResult);
						
						String restrictionYn = jsonObject.getString("restrictionYn");	
						if("N".equals(restrictionYn)){
							// 제한된 사용자
							showResultDialog("가입이 제한된 휴대전화 번호입니다. 관리자에게 문의해주세요.");
						}else{
							// 업데이트 진행
							Log.d(TAG,"Need to update");
							new backgroundThreadUpdateMember().execute();
						}
					} catch (JSONException e) {
						e.printStackTrace();
						alertMsg();
					} 
				}
				return null; 
			}
		}
		
		/**
		 * backgroundThreadRegisterMemberToServer
		 * 비동기  . 서버에 멤버 가입 한다.
		 * @author blue
		 *
		 */
		public class backgroundThreadRegisterMemberToServer extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadRegisterMemberToServer");
				
				CommonUtil commonUtil = new CommonUtil();
				String nowDate = commonUtil.getNowDate();
				
				// 파라미터 세팅
				UsedMarketMember usedMarketMember = new UsedMarketMember();
				usedMarketMember.setPhoneNumber(phoneNum);					// 전번
				usedMarketMember.setPassword(phoneNum.substring(phoneNum.length()-4));			// 뒷자리 4자리 -> 서버에서 암호화
				usedMarketMember.setNickName(nickName);	
				usedMarketMember.setEmail(email);
				usedMarketMember.setBirthday("");
				usedMarketMember.setGender("");
				usedMarketMember.setComment("");
				usedMarketMember.setProfileImage("");
				usedMarketMember.setThumbnailLarge("");
				usedMarketMember.setThumbnailSmall("");
				usedMarketMember.setDeviceType("AS");
				usedMarketMember.setPushId("");
				usedMarketMember.setNotificationYn("Y");
				usedMarketMember.setMileage("100");
				usedMarketMember.setGrade("5");
				usedMarketMember.setRestrictionYn("Y");
				usedMarketMember.setActivateYn("Y");
				usedMarketMember.setModifyDate(nowDate);
				usedMarketMember.setRegisterDate(nowDate);
				
				// 서버 메소드 호출
				showPb();
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				String callResult = usedMarketRest.RestRegisterMemberToServer(usedMarketMember);
				Log.d(TAG,"backgroundThreadRegisterMemberToServer callResult:"+callResult);
				hidePb();
				// 결과 처리
				if(callResult.equals("SUCCESS")){		// adCertificationStep2 callResult:SUCCESS_NON_EXIST
					Log.d(TAG,"S to register to Server. now save id to pref and go next step.");
					userCertifiedComplete2();
				}else{
					alertMsg();
				}
				return null; 
			}
		}
		/**
		 * backgroundThreadUpdateMember		updateMember		
		 * 비동기  . 서버에 사용자 정보를 수정 한다.
		 * @author blue
		 *	
		 */
		public class backgroundThreadUpdateMember extends AsyncTask<Void, Void, Void>{
			@Override protected void onPostExecute(Void result) {  
			} 
			@Override protected void onPreExecute() {  
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadUpdateMember");
				
				CommonUtil commonUtil = new CommonUtil();
				String nowDate = commonUtil.getNowDate();

				// 파라미터 세팅
				UsedMarketMember usedMarketMember = new UsedMarketMember();
				usedMarketMember.setPhoneNumber(phoneNum);					// 전번
				usedMarketMember.setPassword(phoneNum.substring(phoneNum.length()-4));			// 뒷자리 4자리 -> 서버에서 암호화
				usedMarketMember.setNickName(nickName);	
				usedMarketMember.setEmail(email);
				usedMarketMember.setBirthday("");
				usedMarketMember.setGender("");
				usedMarketMember.setComment("");
				usedMarketMember.setProfileImage("");
				usedMarketMember.setThumbnailLarge("");
				usedMarketMember.setThumbnailSmall("");
				usedMarketMember.setDeviceType("AS");
				usedMarketMember.setPushId("");
				usedMarketMember.setNotificationYn("Y");
				usedMarketMember.setMileage("100");
				usedMarketMember.setGrade("5");
				usedMarketMember.setRestrictionYn("Y");
				usedMarketMember.setActivateYn("Y");
				usedMarketMember.setModifyDate(nowDate);
				usedMarketMember.setRegisterDate(nowDate);
				
				// 서버 메소드 호출
				showPb();
				UsedMarketRest usedMarketRest = new UsedMarketRest();
				String callResult = usedMarketRest.RestUpdateMemberFromApp(usedMarketMember);
				Log.d(TAG,"backgroundThreadUpdateMember callResult:"+callResult);
				hidePb();
				// 결과 처리
				if(callResult.equals("SUCCESS")){		// adCertificationStep2 callResult:SUCCESS_NON_EXIST
					Log.d(TAG,"S to update to Server. now save id to pref and go next step.");
					userCertifiedComplete2();
				}else{
					alertMsg();
				}
				return null; 
			}
		}
		
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 유틸	

		public void alertMsg(){			// 인증 실패 메시지
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					String alrtMsg = "요청이 실패하였습니다.";
					b.putInt("showErrToast", 1);
					b.putString("msg", alrtMsg);			
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
		public Context returnThis(){
			return this;
		}
		/**
		 * showResultDialog
		 * 토스트를 얼럿으로 바꾼다.
		 *
		 * @param msg
		 * @param 
		 * @return 
		 */
		public void showResultDialog(final String msg){
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showAlert", 1);
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
		// 인증 확인 토스트를 띄우고  다음 화면으로.
		public void registerConfirm(){
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("registerConfirm", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
		// 인증 확인 토스트를 띄우고  다음 화면으로.
		public void showResultDialog2(final String msg){
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showAlert", 2);
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
		
		/**
		 * hideKeyboard
		 * 키보드 숨긴다
		 *
		 * @param 
		 * @param 
		 * @return nowTime
		 */
		public void hideKeyboard(){
			imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE );
			imm .hideSoftInputFromWindow(userCertiNumber.getWindowToken(), 0);
		}

		// 중앙 프로그래스바 보임, 숨김
		/**
		 * showPb
		 *  중앙 프로그래스바 가시화한다
		 *
		 * @param
		 * @param
		 * @return
		 */
		public void showPb(){
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler .obtainMessage();
					Bundle b = new Bundle();
					b.putInt( "order" , 1);
					message.setData(b);
					handler .sendMessage(message);
				}
			});
		}
		/**
		 * hidePb
		 *  중앙 프로그래스바 비가시화한다
		 *
		 * @param
		 * @param
		 * @return
		 */
		public void hidePb(){
			UsedMarketCertificationActivity.this.runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler .obtainMessage();
					Bundle b = new Bundle();
					b.putInt( "order" , 2);
					message.setData(b);
					handler .sendMessage(message);
				}
			});
		}
		
	}
